#include <ximera/gui/cegui/progressbar.hpp>

namespace ximera { namespace gui { namespace cegui
{
    ProgressBar::ProgressBar(CEGUI::ProgressBar* ceguiProgressBar)
        : WindowTemplate<IProgressBar>(ceguiProgressBar),
          _value(0),
          _minValue(0),
          _maxValue(100),
          _stepSize(1)
    {
    }

    Real ProgressBar::percentage() const
    {
        return 100.0f * _value / (_maxValue - _minValue);
    }

    void ProgressBar::percentage(Real val)
    {
        value(static_cast<Int32>((_maxValue - _minValue) * val / 100));
    }

    Int32 ProgressBar::value() const
    {
        return _value;
    }

    void ProgressBar::value(Int32 val)
    {
        if (val < _minValue)
            val = _minValue;
        else if (val > _maxValue)
            val = _maxValue;

        _value = val;

        ceguiProgressBar()->setProgress(
            static_cast<Real>(_value) / (_maxValue - _minValue)
        );
    }

    Int32 ProgressBar::stepSize() const
    {
        return _stepSize;
    }

    void ProgressBar::stepSize(Int32 value)
    {
        _stepSize = value;
    }

    Int32 ProgressBar::minValue() const
    {
        return _minValue;
    }

    void ProgressBar::minValue(Int32 val)
    {
        _minValue = val;
        
        // reset the value
        value(_value);
    }

    Int32 ProgressBar::maxValue() const
    {
        return _maxValue;
    }

    void ProgressBar::maxValue(Int32 val)
    {
        _maxValue = val;

        // reset the value
        value(_value);
    }

    void ProgressBar::step()
    {
        value(_value + _stepSize);
    }
}}}